package co.yixiang.serializer;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 自定义BigDecimal序列化器
 * 用于将BigDecimal对象转换为符合特定格式的JSON字符串
 */
public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {

    /**
     * 序列化BigDecimal对象的方法
     *
     * @param value 待序列化的BigDecimal对象
     * @param gen 用于生成JSON的JsonGenerator对象
     * @param serializerProvider 提供序列化器的SerializerProvider对象
     * @throws IOException 当写入JSON过程中发生I/O错误时
     */
    @Override
    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException {
        // 检查BigDecimal值是否非空且不等于空字符串
        if (value != null && !"".equals(value)) {
            // 创建DecimalFormat对象，用于格式化BigDecimal为两位小数的字符串
            DecimalFormat df2 = new DecimalFormat("0.00");
            // 使用格式化后的字符串表示BigDecimal，并写入JSON
            gen.writeString(df2.format(value));
        } else {
            // 如果BigDecimal值为空或等于空字符串，则直接写入其字符串表示
            gen.writeString(value + "");
        }
    }
}

